package com.hbzhit.modules.act.handle;

import org.activiti.engine.history.HistoricActivityInstanceQuery;
import org.activiti.engine.history.HistoricProcessInstanceQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;

import java.util.List;

/**
 * 流程查询接口
 *
 * @author DING
 * @date 2019年7月23日
 */
public interface WorkFlowQuery {

    /**
     * 创建流程实例查询对象
     *
     * @return 流程实例查询对象
     */
    public ProcessInstanceQuery createProcessInstanceQuery();

    /**
     * 根据流程实例id获取流程实例对象
     *
     * @param processInstanceId 流程实例id
     * @return 流程实例对象
     */
    public ProcessInstance processInstanceId(String processInstanceId);

    /**
     * 根据流程实例业务id获取流程实例对象
     *
     * @param processInstanceBusinessKey 流程实例业务id
     * @return 流程实例对象
     */
    public ProcessInstance processInstanceBusinessKey(String processInstanceBusinessKey);

    /**
     * 根据流程任务id获取流程实例对象
     *
     * @param taskId 任务id
     * @return 流程实例对象
     */
    public ProcessInstance taskId(String taskId);

    /**
     * 判断流程是否完结
     *
     * @param processInstanceId 流程实例id
     * @return 是否完结
     */
    public boolean isProcessfinished(String processInstanceId);

    /**
     * 创建流程实例历史记录查询对象
     *
     * @return 流程实例历史记录查询对象
     */
    public HistoricProcessInstanceQuery createHistoricProcessInstanceQuery();

    /**
     * 创建活动节点历史记录查询对象
     *
     * @return 活动节点历史记录查询对象
     */
    public HistoricActivityInstanceQuery createHistoricActivityInstanceQuery();

    /**
     * 获取活动的节点集合
     * @param processInstanceId 流程实例id
     * @return 活动的节点集合
     */
    public List<String> getActiveActivityIds(String processInstanceId);

    /**
     * 获取活动的节点集合
     * @param processDefinitionId 流程定义id
     * @return 活动的节点集合
     */
    public ProcessDefinition getProcessDefinition(String processDefinitionId);
}

